// pages/login/login.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    showPhoneAuthModal: false, // 控制手机号授权弹窗显示
    tempUserData: null // 临时存储用户数据
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      wx.switchTab({
        url: '/pages/index/index'
      });
    }
  },

  handlePhoneLogins(e) {
    // 通过 open-type="getPhoneNumber" 触发
    const phoneCode = e.detail?.code; // 新版获取手机号的 code
    const hasOldEncrypted = e.detail?.encryptedData && e.detail?.iv; // 旧版解密参数

    if (!phoneCode && !hasOldEncrypted) {
      wx.showToast({
        title: '获取手机号失败，请重试',
        icon: 'none',
        duration: 2000
      });
      return;
    }

    wx.showLoading({
      title: '登录中...',
      mask: true
    });

    wx.login({
      success: (loginRes) => {
        if (!loginRes.code) {
          wx.hideLoading();
          wx.showToast({
            title: '获取登录凭证失败',
            icon: 'none'
          });
          return;
        }

        wx.getUserProfile({
          desc: '用于完善用户资料',
          success: (userRes) => {
            this.performPhoneLogin(loginRes.code, e.detail, userRes.userInfo);
          },
          fail: () => {
            this.performPhoneLogin(loginRes.code, e.detail, {
              nickName: '',
              avatarUrl: ''
            });
          }
        });
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('微信登录失败:', err);
        wx.showToast({
          title: '登录失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  performPhoneLogin(loginCode, phoneDetail, userInfo) {
    // 优先使用新版：loginCode + phoneCode；无则兼容旧版：code + encryptedData + iv
    const isNewFormat = !!phoneDetail.code;
    const url = 'https://www.r8club.cn/api/phone-auth/login';

    const data = isNewFormat ?
      {
        loginCode, // 小程序登录 code
        phoneCode: phoneDetail.code, // 获取手机号的 code（新版）
        userInfo: userInfo || {
          nickName: '',
          avatarUrl: ''
        }
      } :
      {
        code: loginCode, // 旧版：登录 code
        encryptedData: phoneDetail.encryptedData, // 旧版：加密数据
        iv: phoneDetail.iv, // 旧版：IV
        userInfo: userInfo || {
          nickName: '',
          avatarUrl: ''
        }
      };

    wx.request({
      url,
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      data,
      success: (res) => {
        wx.hideLoading();
        console.log('手机号登录返回:', res);

        if (res.statusCode === 200 && res.data && res.data.success) {
          wx.setStorageSync('token', res.data.data.token);
          wx.setStorageSync('refreshToken', res.data.data.refreshToken);
          wx.setStorageSync('userInfo', res.data.data.user);

          const message = res.data.data.user.isNewUser ? '注册成功' : '登录成功';
          wx.showToast({
            title: message,
            icon: 'success',
            duration: 1500,
            success: () => setTimeout(() => wx.switchTab({
              url: '/pages/index/index'
            }), 1500)
          });
        } else {
          wx.showToast({
            title: res.data?.error || res.data?.message || '登录失败',
            icon: 'none',
            duration: 2000
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('手机号登录请求失败:', err);
        wx.showToast({
          title: '网络请求失败，请重试',
          icon: 'none',
          duration: 2000
        });
      }
    });
  },


  // 小程序 PhoneLogin 方法
  PhoneLogin(e) {
    const that = this; // 保证可以在请求回调中使用当前上下文
    wx.login({
      success: (loginRes) => {
        if (!loginRes.code) {
          wx.hideLoading();
          wx.showToast({
            title: '获取登录凭证失败',
            icon: 'none'
          });
          return;
        }
        console.log(loginRes);
        var  codes = loginRes.code
            // 发起请求
    wx.request({
      url: `https://www.r8club.cn/api/auth/login`, // 使用正确的后端接口
      method: 'POST', // 请求方式
      data: {
        avatar:"https://thirdwx.qlogo.cn/mmopen/vi 32/POgEwh4mIHO4",
        city: '',
        code:e.detail.code,
        country: '',
        encryptedData:e.detail.encryptedData,
        errMsg: "getUserProfile:ok",
        iv:e.detail.iv,
        nickName:"微信用户",
        province: '',
        rawData:{nickName:'微信用户',gender:0,language:''},
        sex:0,
        spread_spid: 0,
        type: "routine",
        vuserInfo:{nickName:"微信用户",gender:0,language:''},
        city:'',
        avatarUrl:"https://thirdwx.qlogo.cn/mmopen/vi 32/POgEwh4mIHO",
        city: "",
        country:"",
        gender: 0,
        is_demote: true,
        language: "",
        nickName:"微信用户",
        province: "",
      }, // 请求数据
      header: {
        'content-type': 'application/json' // 请求头
      },
      success(res) {
        // 请求成功的回调
        if (res.statusCode === 200 && res.data) {
          console.log('绑定成功', res.data);
          
          // 检查返回数据中的 type 是否为 "register"
          if (res.data.data && res.data.data.type === "register") {
            // 存储临时用户数据
            that.setData({
              tempUserData: res.data.data
            });
            // 显示手机号授权弹窗
            that.showPhoneAuthModal();
          } else {
            // 其他情况的处理，比如直接登录成功
            // 保存登录信息到本地
            if (res.data.data) {
              if (res.data.data.token) {
                wx.setStorageSync('token', res.data.data.token);
              }
              if (res.data.data.uid) {
                wx.setStorageSync('uid', res.data.data.uid);
              }
              // 保存完整的用户信息
              wx.setStorageSync('userInfo', {
                uid: res.data.data.uid,
                phone: res.data.data.phone,
                nikeName: res.data.data.nikeName,
                token: res.data.data.token,
                key: res.data.data.key,
                type: res.data.data.type
              });
            }
            
            wx.showToast({
              title: '登录成功',
              icon: 'success'
            });
            // 可以在这里做跳转等操作
            setTimeout(() => {
              wx.navigateBack();
            }, 1500);
          }
        } else {
          console.error('请求失败:', res.data.message);
          // 你可以根据接口返回的错误信息做处理
          wx.showToast({
            title: res.data?.message || '登录失败',
            icon: 'none'
          });
        }
      },
      fail(err) {
        // 请求失败的回调
        console.error('请求失败:', err);
        // 这里可以做一些错误提示或重试的处理
      }
    });
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('微信登录失败:', err);
        wx.showToast({
          title: '登录失败，请重试',
          icon: 'none'
        });
      }
    });

  },

  // 显示手机号授权弹窗
  showPhoneAuthModal() {
    this.setData({
      showPhoneAuthModal: true
    });
  },

  // 隐藏手机号授权弹窗
  hidePhoneAuthModal() {
    this.setData({
      showPhoneAuthModal: false
    });
  },

  // 处理手机号授权
  handlePhoneAuth(e) {
    const that = this;
    const phoneCode = e.detail?.code;
    const hasOldEncrypted = e.detail?.encryptedData && e.detail?.iv;

    if (!phoneCode && !hasOldEncrypted) {
      wx.showToast({
        title: '获取手机号失败，请重试',
        icon: 'none',
        duration: 2000
      });
      return;
    }

    // 隐藏弹窗
    this.hidePhoneAuthModal();

    wx.showLoading({
      title: '绑定中...',
      mask: true
    });

    // 重新获取小程序登录code
    wx.login({
      success: (loginRes) => {
        if (!loginRes.code) {
          wx.hideLoading();
          wx.showToast({
            title: '获取登录凭证失败',
            icon: 'none'
          });
          return;
        }

        // 调用手机号绑定接口
        wx.request({
          url: 'https://www.r8club.cn/api/phone-auth/bind-phone', // 手机号绑定接口
          method: 'POST',
          header: {
            'content-type': 'application/json'
          },
          data: {
              code: loginRes.code, // 小程序登录code
              encryptedData: e.detail?.encryptedData || '', // 小程序获取手机号加密数据
              iv: e.detail?.iv || '', // 加密算法的初始向量
              type: 'routine', // 类型：routine-小程序
              key: that.data.tempUserData?.key || '', // 注册key（如果有的话）
          },
      success(res) {
        wx.hideLoading();
        if (res.statusCode === 200 && res.data && res.data.code === 200) {
          console.log('手机号绑定成功', res.data);
          
          // 保存登录信息
          if (res.data.data) {
            if (res.data.data.token) {
              wx.setStorageSync('token', res.data.data.token);
            }
            if (res.data.data.uid) {
              wx.setStorageSync('uid', res.data.data.uid);
            }
            // 保存用户信息
            wx.setStorageSync('userInfo', {
              uid: res.data.data.uid,
              phone: res.data.data.phone,
              nikeName: res.data.data.nikeName,
              token: res.data.data.token
            });
          }
          
          wx.showToast({
            title: '绑定成功',
            icon: 'success'
          });
          
          // 绑定成功后跳转到首页
          setTimeout(() => {
            wx.switchTab({
              url: '/pages/index/index'
            });
          }, 1500);
        } else {
          console.error('手机号绑定失败:', res.data);
          wx.showToast({
            title: res.data?.message || '绑定失败',
            icon: 'none'
          });
        }
      },
          fail(err) {
            wx.hideLoading();
            console.error('手机号绑定请求失败:', err);
            wx.showToast({
              title: '网络请求失败，请重试',
              icon: 'none'
            });
          }
        });
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('微信登录失败:', err);
        wx.showToast({
          title: '登录失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})